#include <stdio.h>
#include "ps.h"
#include <vector>
#include <string>
#include <stdio.h>
#include <unistd.h>

/** 读字符串到文件 */
std::string readStringFromFile(std::string fullpath, long offset /* = 0*/, long len /* = 0*/, long *totle /*= nullptr*/)
{
    std::string ret = "";
    if (!fullpath.empty())
    {
        unsigned char *buffer = nullptr;
        long size = 0;
        size_t readsize = 0;

        do
        {
            FILE *fp = fopen(fullpath.c_str(), "rb");
            if (!fp)
                break;
            fseek(fp, 0, SEEK_END);
            size = ftell(fp);
            if (totle)
                *totle = size;
            if (0 == len)
                len = size - offset;
            if (size - offset < len)
                len = size - offset;
            if (0 == len)
                return ret;
            fseek(fp, offset, SEEK_SET);
            buffer = (unsigned char *)malloc(sizeof(unsigned char) * len);
            if (nullptr == buffer)
                return ret;
            readsize = fread(buffer, sizeof(unsigned char), len, fp);
            if (0 == readsize)
                printf("Get data from file %s failed", fullpath.c_str());
            fclose(fp);
        } while (0);
        ret = std::string((const char *)buffer, readsize);
        free(buffer);
    }
    return ret;
}

std::string StringToHexString(std::string str)
{
    std::string output;
    char temp[8];
    for (int i = 0; i < str.length(); ++i)
    {
        sprintf(temp, "%.2x", *(uint8_t *)(str.data() + i));
        output.append(temp, 2);
    }
    return output;
}

std::string HexStringtoString(std::string str)
{
    std::string output;
    const char *pString = str.c_str();
    for (int i = 0; i < str.size(); i++)
    {
        if ((pString[i] >= '0' && pString[i] <= '9') || (pString[i] >= 'A' && pString[i] <= 'F') || (pString[i] >= 'a' && pString[i] <= 'f')) //属于0-9集合，返回是
        {
        }
        else
        {
            return "";
        }
    }
    for (int i = 0; i < str.length(); i += 2)
    {
        std::string str_temp = str.substr(i, 2);
        int temp = std::stoi(str_temp, nullptr, 16);
        output.append(1, temp);
    }
    return output;
}

std::string getIPacket()
{
    std::vector<std::string> list;
    list.push_back("000001ba4e908f1b740100fa07feffff000000c9000001bb0012807d0304e17fe0e080c0c008bde080bfe080000001bc005ae0ff0024400e484b010014c12e23718000ffffff4112484b00000000000000000000000000000000002c1be00010420e0000a02107800440021cff001c2190c0000c430a0000fe007d0303e803ffbdbd0000bfbf000000000000");
    list.push_back("000001e000268c800823a423c6ddfffffc000000016764002aac2b503c0113f2c20000030002000003006508");
    list.push_back("000001e0000e8c0003fffffc0000000168ee3c30");
    list.push_back("000001e013fa8c0002fffd0000000165b8000008f7a025ff0098adfffe8f67da986f2cf2aa9fc3c8d3654eb090be917f3cce57ec326bd72dc90f28424178903af162529a9954728ee9544564ed6ddf282b533d9496b0bd3fd9e9c6e296643d38c307a2f21893edda3e4fa82905b60cabfc2d816869ccd570d6088afe76da7751da99faec30e2103a5fbaa1e4b113ce8f728b8b0afc5c25a38e9518ffecda72fd148098da1a5ac1c90506b6eb3123fc7ab7949678f9f06b1d7f09a87306c23132eec88f359c51f317341690743106e9638db572e73923a0902d992f0b5912924f3fecfc401e5a3fae293e217ceee0f3b3cdaaba8e64ec63d182d76a020cdb75c5479b5902cf164e3bfa3fcdb5be80a7db09b096dd7035829f60a1a9c837a227a4c7424000c3b2857666bd49e5e0a4cc72ad7fdc4784f9ef1eaf74148974ba2b91114d3d30d56cbb9c3e1a4298b7a3fd356aecede2f7908edd7ee6c553b3a6f54465215c5a112526a4b423d401104f8b3b947e08219128e87a2dce62b916fa2e1df3f1fe6625fec832abd6862b0fee9092603ccfa6f52a3bc748a6c470a50637ba24af619570f259cd4f40717fc56133f7a5870c2a7052ef1278751808997b96463b2fa007f9b7904916d7936d8fdc8dbd4a9e7ba3e8989ff11622b4b28edfa3117d18dcbfc4122391a6d011a503eb38ea0f43b9dd75cfdae48cd6885d16c89ea5162d0dfcd15e223623c349e444679947208fda4a795b2a501677184dae0f11a2e4ede5986ca1810d55e2fe19b6f651bc4a28cae03a994843f44cbee1a1cbc8bc6f8413d696b90cad9c285b0900ffa0c46215cd6d35ebbf6cbf60c6a147bf6daa62e27f32454816aa7d023194386adf68b226eb4f2e454f4499bb69c4c2ab568667260ddafd8248e8d46a31882557a157108977155f2ea64c2d26ec67aec15ed259177f6dba812ba683e8de9bed1670724d41868057f359230c7ca085c4d950f1a03921f60e82f5ff0a9d53d5f9d41f59d142cb38330a7406f008780c769dfbe8d863172ff530c1ba09deeac5110e3d9fedb8ff52bbd20664b79fad2c2f99978aa9c91319496a1f25da59bdb14a6b395558c07e9c50b24e9c61d66f8368fd322f992f17550b42b0f0782eb7db2b2fe592db2ac872e8649e63cc38b6c05c8edd20b10195ce04be4f7160084d9ecebade720bb859146e27ab24a2387f87113182646f5b7109684fb0a68c5c35e72ce82ed220936f872d0b589ec10e64deb81e9c59ad65d01ca91f3b606705dbdf7470c2edcd0c99d165d6fd0c11f0a68728625169acff8550114eed50145a298e661b37d09d0ba6684ee0942b3b33719610055a901ced82ca6a19820d6e52e76b1ed580ad4e2ae15d187942493a951f9290b2c5347f7bea99092d8dc3867dca728502c0d13a988393c79d46fa128fef3a5e86e45d871f8898c910d7747f5f42fabd3b26420d01a2e745db2ea2d4ed9daad5189ca37246ab6d879c74a0c0303b6856ced428353e82843d182d52d717c1f8af6e87870cdb8659872278b76c8a7a25a2dc596339241be41b6ffa9a4ad359463402bb2293d9905e1ba8198ca2d6fd71e6284b5accbf0868053689d170df00fa26afb0b99a9f89ca601e093286dc0f6ad434c632dec218e1304f3abe97cd3a57f241be17bff1d2f5f1da37cfa3f8549ad77194b27c37aa0f6ebf3531ed9134692584210b5f3a74a76410b7ebb4e1fafb30825726a3d40d31375145061fc1cac57a878559bbe86e3fb0b6ac9d8d0182e50a30bf4f6ba5d2b9f64f77f6d35493c6");
    list.push_back("198bb711947a1926f10ed8ee0ae8ed543d24f965d936dda9e11e4105ebaba5dded425b8c6f8286cf9d61d5e7448c0adddf3351305a9430b4175dc307b9534734a07d51e1f2437b992252e87d106cc3e266e36b2d1b3b70bd6a91315714db7213d329045dff6536045c94adfa94157f4556e2eb047376113f64b8b510371c07acfc1c193282fd478559c0f831c1030e721e4f2d3f16e72c28b422c05fb261fbfbe3fe623c8d6d17d3c715cbc825cf81986bd05ade3f1e16887c7c6ee773dc1287c4633c29494a9bb475ed352fb696e1aace6e355bfd2d0a7cd34ca39bb131f73483b323a2403b1fa8e18468cdf4f7f4b195bc84ac6f217dad88d3fd8fb55b0388161e134879b36c8ed79861e488ec1791420621b1f1c995d5e0c0869048e1e732c26b98fc75f7478a5fab78a279d127a7d5fdc2a0c505a36ca57d483ee3af8bf2fe899394ab758dd3a133a66d2746b7b460bb020c0cc5696c10a1561dee70a0b6ab05b6470e710173f4801237714fb54c9e25be5607c6cf8e9651c067f0dc730108ca1a923db8baef1c81db254635a805701d231830380abcb0c145b1d83f826342b4dcea6b3e44e4a143863f9a5cf9f4b8acb0ffc62ccbafdd284ae52cfa25e85cc5d709468976c9b10a7c0eb9a10d9d91140c480dbef83d9e25eea2b7531c2ae10305b5a3230ee5efb0c0a22750fa329ac6f0d02743993559c0f745dfb1ca89ce7daec56a9d5059a7568db79a9e19bdc8cec9a17f7dbc1b754261ebe1d1d8ee9fc5f323fbabc45206f7ec2ceba2481b3f415aa344f76d41628fc230ed299e6aec0aeb15efea2aba82871fc5eb94ca70fd34a061e9c1183ea5b809631efdda41f0aecdbd71c6aa352e9f6086addef30f03383e9926f46b55fbea088bfc06d7a5cd9c9f24153586af9a1a5a501ed971277d376b261b577c0370bcec323e8253e1fb1a2a16b1d180e7bf70205b3d929c725a6fbefec940c650fa7c6430d380860979d15853d8feb4c68f4b4a8e3e8ef29f77b62c03fbf36fa627ac574a8c17724f3c48d7acc31373159dbb0a48a3659951ad2978b341091a3a35994df550f78a968e55e10042d2dd03659f3df36d3222ab4a3326fd95eb28c2df77676f8918f6d2e623a4ac80bb3af1bec129d64d78b600949ebdce7cb739fc042b4d732e325a93525043070daa59d94cd120f8e10a5738bd3ec2a3174b6ea7492e02a4a0cae9b497127354907bbb629f371f82d3376e158972ce9b9ff08d6882c9e90497b7dcdb17abb63d11f77a301732f79ce8f40a60160c508ceeed2b50f6cc2038e148abf7c251bf77394807c127d45ce6a3b87f6baa22fcb2763e413a8b73a38dd413fffd7e6a5f3f715c72195effdd37058b49a29e1b6665518aab538c898861e35382a648ff96a2590008442ec7dbee288a74ad03aafcea6f40cc01e7a1f9a493fe5ed9dcbe0f9b599b2fc0fdc37b350b2655e8bdbf1728a844909ea65e9c00b0bbc72c5745094f4c2691670588e19a72c8bb936e87ee257a16722771e94f18933d857f51e86cd831b64100a65c8738b7de6676987e45f47047294811da1ccf9618b00b6b90a2688ad41fa9db0958318b096833a603e8ea0a8fdd032d3314165343909eefe6f49ec4ae5804eaf64bc0838950e3d2d166a3e516ac5368792b0880ef66a132f75eea1e853add1fe85149f0e5a43079dc4a0f86db8da8056b0a5babadf9701aff86dc3a478614a6afae2bf1d14bb9cb11fd3d5db33ab10761d18d54b9dbbce9c5c4a6c72a66f934add3cddf753c37e4df9af631a2437fe610f969");
    list.push_back("8d915acc24c89cb5c0159f5dbe931ff4f08419f426f9e0d6fa05f6089205bcd9df51070fbc2c9ac899b37f33aa368f2e29d79652e860d15d605d600078849aa27c18b20e84e793f47faf9dcf503d99ffb61b9e47d933d68555a61c117404af5fdec75ef55f9b9e09660291a5ba31edf010a74fad455b95c1dc776d6a8358059e321b57967a6e08f3193565a640cda5f18058009ff6d62588026c395c6fe0b7d6cd6ed44f897558e1b82d5839ab5a71e9cb0ac95ce0f7d63046f070e7a56869872b0baafea87f535a75920e759a23c86829a39f7fb1bae9f829ae01cc5d74e0d4d58a6d257982bbf22560515d76dd375d7906de964b846d9a90b30c1169027048cb1548c2ded2dc18a092a0ce8cfacdc7c6a840d019980ec3f218c357e7fbd923e67d8406937a00074eeccf9e48e3ca296a507522c89a5be6d4f7ae3fe73b86762174efd6ed76331dc594fc7644dc2db8fe8a2d1f1f22b4cbebadc95c3ed3f2dc01a2174bd62cceaa39d187372824d807d4bcae5d98049c0e668f88fb79b3a0e18483f8dbcd2624bd5c5585dee9615ffa0327e216fb9b8621aac8b98ae1abddc082521ea5357220c30924acfbb16c3cc080a230f5057cf9762721d661299c2c9834942ce568962855e8ddd05b110a299eac3c22df9a08eb3c26c931d6f4c7c719956a4d7d1797f5639426de42a677a2dd86e5b2cd91c9fabc65d03bd016399b5cfa4d0d036354b7263ce813d61e569b0fab8c7678d6d257f17c7ea23cf7eb7b8ac181723ffdb32110c2dac34a26cd3dbc8bbd770d2cdafa8cf532a5623be135c33d92a7f05264252abbc1ef0121969eed7c1ed246dbebfb2cb535ccd81628c65f98ad5909dcfb267e0e620cd6a1498e35ea31fb20137862ab6837132d11c69d6e7c8e9475cd8b00d27f6ee84b205b45299de56abd3f394b4900b1ce82b97f34a5aec8b4220bf640c2ba7dae0d0e80392056b915d56ac589cf8a920ebe4b38b038337e4b802d2fff433f72284832768b028aa6cd43e5fd213246044311ef546106a3d6ba6f848690084895f66241b967980cd8bd6fcb4e85135f6fb8ad3a7314585ea29ac72e5ecc6602354c63ef6e94cebb5163ae2d299aa7f99e980e9eed36659a867a41f78d5609dc9b5df43cea02bf3ef9e39419167c6940fed64debc47e326a0acdf8f81b1e7e4eea7863442ecb883fefe6bbcae6e5ad5b7c1f53d91937047b0cfb2bce38c1642a433ac90b241bf57ea1a458300948caab6a789a975845999bcf407e4df38731adb95e935d2512a11a948adb788b486753264639a6c33d339c50c75d1b74c46d922834c2d95cdcf6f9426f941db7a40158ed7915e6107e61f515f7fe872e301e635843c3bc072a2c391dc8a22a0950068909992a6e6cb496ee3bc55f4f118e7054c25d985826058d157b8dd6acd37c8623fdded3427c206075c58e6e5b6ebdda5bc4fb27e137d75b2d81be79f062f57f2283d7d07efd521ee7151abf2f44654f65592139dd26a38382015d11f8a9dc06d154f9cef4b9ed6c773f916f3f274f039cf44652c6b4a5a4fce47c596585f0dcf2b478d53aa2bd26853687cd69b5e1a3e303a0c3478dbaa504d295f6d29a1594023b8087c698c098cc8bd3c258772900c3e847b22a1c79a69eaf064151ab22d6b46ca748832d91e30eee83a8404ef18a4c99b7fa3cdb7a194d23627db1a82a677ee7846856eb43df83b92714e058409db3515aa31837c55f49a252bbffeead52c57bd2aec98944918808a8bb8a0fcefdf1e62b1dfb25fb2ec273494755c6be3002e130dd");
    list.push_back("a170e262e8ba07fd7ed870c58db617cb0dd1f3b717eac96cc49ff197649eed4f7d10427735d9e3e0620980ba4efcad675b4a138c45085a6c0d7571a425d19b3f58bfc2d41083888490dbea5a7ac320335cff13f908620b6c7f22221f8754281396b45f8613e7d115d924b8cef54f9b0fa02e3f319ba3a6f46cc330f26667952ad25d16589c27a7b421cce34ccd33116971edf72503e43ab85a65b5a1e20e106538e9e531b0101c66fc35893f694241f8f1d5bac24dac62bf683ef1e7fe95efe5e6d747bf027d857711fc499b9f28481f23469c93e852abaa5b2db0eecd1fccd8d8db52fd5bb81384f93a9cd531763856026cba09713eed15678b156e1d4644b914610512971d529be447a90a267b21f07fe032d36d651ff8edcb2933f969208c791e860c0333d730564d29af941a0fcb0dd2d867633c0f067946b318a235be2a0bff7e7370308313afe935351d6f63ff0d721bc772cdfaea5bf216b9964f673e294878ab120523763a9dba1ad6eff6290916637e158a486e873f9186b75a59e717c7e1e4375da3964146bb2846db273eea652a68386d587d8b761a8cc288789af7a08fc7f64f25325229226ff4068666a36dc43715574cc471ed0d537712a6a5e07171babcaa49275de6a8fbcf45e292126c18bc4737e229067c5bbfa64c8916a264ccdc43c5b6e7be837d17c4bb1e92a1665e1c301f8ece568c95d3b7cf8cf96973d4abca207393478ffe54b95c41e12e4d04f53372989d95ab8b6de7d9aa60fb1a3a853e8fa0636782b64b2f747e26278fefed43ed1804056a6c66387ef15d8f24eb768d37779d914be3e4c073c39e83da0ad57a914354affbd28505f94c9273a3ae5902c172455a064b088a562b6563c958211e2976200da1b195fd0f55a230d31fd4b6d6371a491c8cbcb719e3bd6af3d0391bccb4ea51bb5de7b12b06419f541b797cc0c7e5b7e64ac5fa2fb0f0ab1be3e6ff1f7ed6ae8029e398ecb06d5eed1c71edec31c1e4f6dc31d79de4c2042099dfed7b5e3fd147949092fcb35b031addcb8cbf22a7e5cd93bd3a98ed4ef6197ae61de8acad698fc2fb53cc2b150f6795e9e61b1d719f239b828105ef8f3f3bb43145920353c48fdef31f8f6eacfee7dd4ca9b2dff42f2160a66f9571f45fff155349d61391c33b87161183675c7152f1aac957ae07be2107b6d3044b7f1e62e92ba7f69569310ff655f4f7b64d499ce317e978289637292a4a13ab329dd7673e037058c241865a8223aa49ff970d260be7518571ddb771fe16bdf15ffa943a3709822cebc03dceb141cc351c9e8955b6aca4c133e5ee66b98fb2c7754d61eea49f141cc979732b5a259a26151381a7378a75c487a41aa737740c3d287ed448f01f6c262ba6d7f9819ae66bd436cbcbf786383d1f8ec1c0a8eda21dfa3b413299d1ecc3b72301ac1ec743b4eb8560df9cd750ad9d6e249f54d8e46a5127237565eeb53a496977d02b23c7e72350cf0358904050d5fdab8bf3e56af3d3f020c08617052d1e9ffd67b0f6ad285b3c3d8b17a92f6c4a0a86bae0e49155070b636b30ab0b0182a131b1b772ed99a65bb89a5d72681753f7cc5d5e2214c73c5e6a0690f72e3411a8495ea3c67fc9be4d9300908f16d06885e167b61daf9c5836cab4b82988139b02c8105aab047cf34da0153fe8cd8d8cb123e9eeb3b1abb4a9e1b8c6892a440cf445b8b1c13ee4adc698fd3efe6a1bb4e2119bd54bb1ff49ed0f25625f49a41f1dd608b3ab7aeb21edcbab27cf1e1d1392e7e280488ba12b727b02652beb42e585675bfb85");
    list.push_back("9d18f436c3b499af81ed6585f0fbfefa");
    list.push_back("000001e013fa880002ffffac7487607f0a631986d8468331661f9afddf28953767f91c21b6c9e39058be81cc62773c1e9092b2b1f19b532b6151efdd9f3721cb6b3c84797f99865cad509ad93aada8fd4364a22b40f32e3f57df03a5ddbf19dbf76d2d32207a803841a0ec55259a79a9353ca3da01ecc21cd094045b7ba8e96fde17f27c9f26d244edea283b5ea3699490b0478cc70b6eb29a4a35a4bd628c169fb53f96ed206c8b8f9dd64052cee3c808ca74c7d2ad75d64b819ad61df1a47fa7b6811b99c917444dff1655b348b416d16e9fc72673e5cda9a3b882474283ededed6285bfd495795974704a3e1515325de4bbf04a43274f9a60d5d6a5eb39ae480d6605472f8b424ac3e2244c39ebf86ab5d1aec0a2caa74eff97e31ad884780d07ec81793879471c720376d97d125b605412ee416466ccd256e254db18245ff937965a3dcdb77554cf981c612dbdedbb8c0c6043a50f634947ff8ad6c3dd10b7135d38a02eb63d8a9b4b1d9a7f7d872b74f5069e417212397944e70ad0904aed184eea41cff5a1dcc18d74c40d1ada14e7f7744ce0d986f82a165f0798bdcb25de9bda332f87248c7ef9af149eec5a6eeb144d6dc177d3c6d7c9393ff882073fdeba20501a1d2f7d7d0ffaa97450556aa8ddf1390265d871bc5609e143b80d9652b833cda5bb13f2f6d9a4c590367368dbfe0718940a9ee0b259015c7cae7e4486ae11c01e97362e35d03085f358c3a6a8e606d07bc319b176206ac4919f83b266f911fdf899f2889263668f936e752806203874e63db02019bf5aaa76ecd942a382cf0b96cd55f57332fbcd8c686c57df6798a46b932c0192683fd0c11e8e0929875e33d331f0b8cd95a6e50ba20405f17da52915c76740b3044e395b4b669898c7206eae054579232238f1a1f4cd593e8f0a060a6723d0b908a83259a0c1ad219d06507951c3653b1f2253a56cdc4cb506d508b02149557fad703e0740d859b07288c4bac5f410d7b786aeda886a286c66ecd4424225b1e17516fd8a1ed2796964080d7c154703b1d32242c1531e1ee351313b4bdb9dde9e9ff9df372fbaaf0d18ba787e7c59861c08cbceaf978f08c2fe45592fa3bd12ffcd70266d8d740e7ee184985a3d0908e42af9c5401c5be9f6a3a1a6d6d6330b49fadb70d44363dcbc4bfcca56cd4af14c87f12bba13188ec059e5aa54b4d2c1b4df1030bf09d7c879100408e93245730561ea591e5717726458694a949417e9b155b23406caf243f30d62bb7f8015062cc25e792d1e386703d8a100105315d2e538d4839c79fae7ecee65d1168b2fa20fd7d905e165431747b7cdbb9fda1f44131b0241bae6091cc323b519ac243aa7d73712328ffd9a7dfae26b63eebdda519c010f8b4271812f2f87c7e67fe3611f7eed74b265b56b12d03da9a2aad0fe455aa8c7c25d29300f01cc595b19310471070ac57ccd1cbc954c150d8a052c4572061ec6223035caddb51d0fbe23dc756604d95c7a40e315be400e55f9b30e97478283d2c2f71f565d28a183b60fb8e23494e5fc14e62423694d7bc448b4d29fa96f352373ae027b6744052613066d810a982d04510ce4b119dbdb6b9fe8f82d35edd938826a4909653c3b59c75cb103b7dfbe0057bd0457f40bd96fc176d5237e43288d88d2b4728f9186252fd59ef6b8d9f63ebf739ecceecba7e8491859d65d9245e687b44327ff6a55c25a200a7cec685ffe937cb961298e455ebb6ed16964fcae4e3fbf464c9838cbd06e742805ce8cf831fe9343586260c13c7e19169193f0cbb1");
    list.push_back("9130fe7bd82c1646a2d76d7137eef1d8c4f2890abed22e8f3e57c442d7d887fb454bcef3d1ea0ac9e69b1f303afe83b1526592e178dd59188a4744187da117467b36036a83c8ad566321b52fcb91e51a8b5553082fbba84e1247bad30e5a8a0abd8abf3ea71fa89ec14da531ae746c7a764f84b0c84487fe573292e804fa745bb8a8e84b282c5d011495aaaf97c10b77a707d5f075bd48de69200b0c9032d4370aaa3100881a4c4efa2dc66949ba302532fe5b31aceccc9933ec3e7c926b6318c0b3d82909300a4028d1e0a40b7354c3afbc83eca2c3547812eeae6f68c0822555c90f23c0a55446031b2bcfa42c929f5f29bf37673db0b01bd63f7ce5852f2d2195722f406f0a77380a7d61dba44e15e08a61078ad50d124eb7b636439d2bcf60ea5dea32726753c932d32222d1e62cf1359d5d6fbb6dcfcfc8988c029ed9b5eab8b70964edc744c926ea57026ebfcd3aa3bc97ee65d9a0e08b6bfc40a66426558a00cd972466fdd9d74208ba3b5a6f5300174778f10f39b734e929082590ebb8dae7a0ada615d131d37148b7b1647ec223e7351782a9f6e83843a465cb76b881787ee50c4973328468be7212f4422717a48f88a47daa7664f7bdf885efab92ccdfc835ee91c27be741b2fb87d5a03c47233df2383e19231f8e4e6c426204bdddb03f50acc25a4e4ab948e3ec51b7dbd1045a528e855f1577037dfba3738c302b797d7fc6998f013014005fc9e14ba95985959ae0b4cbb7f22e988eb3fd4a14e0fc608c9643385c9630af5c56e430e0d1505353700b5c5883c8c4412ceba1ff47ad3a29097dc6f13184e859bcf1610e22ffc8ec6e399e962e82b50df728b79daa927b9cd9adeaff54fdee0935cd896e57ea30991e04ff01c9be6d2874059cb9047ba4058fb24a571afc1dbc1a4296430ae19a5296f21a72a2c60020fb51154f4c4dce1eefb25c907c61b5e0f8caee8ca9cf36bd3fca8656074254cd5834f79cc49e8c52dce425f934551eb77ae9971010206d5418bf3c79edba7b5dacf6206353d12761c2cbd6b836290525a3efd5cc846103c938c5987aaf0ba40ba88d0118b68c5db72dda76c76af417962fcdc3aea4497cd46fdcfc0cc2ce92dc76e127884bcb815f6b1b3373e9916ebb01d683f26703e0fba0abf1ef759f0e995dd2f62fc6d84e9786da0ba0c0bb58bfb07b3d4564171842d4c7e91bc14fd2e3e0962622309081b0b6687bad608247d8936ae27b12870ae78bd10e5d9c44afa9afeee716dd2b2bf30e9394806f3f13ae28026806d1f501b923cf5742fbe41e17b58c1020cbd8765b69bce5d6bd1a738aadd305d8a8e980f296d963bcc0d6fc061d5ec8d8267973704b2802bd2fa0ee7ef2c32acc8201fccddc0da6e89c67bd2ddf7119e10f5ca4d3aa3a21df8686445e1f5fa790b844e297474c7c44cb4379bca42f3135b5f0a68adefdd2e566539ffab53625cd853ff84100b5ca376a1dc59c80c5e0dcd6cd150878db57d6a2a50a82c0a853d38f156f79bf19671a2e28b47e8a1e789ee5a317f3791447deb17682b9197a625bd7e81c7fb5c4f2e4c2328eab5a99ea775539b7f0e52e33502ab1ef4b7cf1772cc25be000a7ddc0f03e615e2e8eaa5a3953341ed8287cae6af4b82e1570ef12b5a139d5805239370309846eb2f831800164e66af604ae8f3aa8f29407faa849b895e4918e81f1fa8dbff8cb0bce6a6edb5918ee91e47ad13083ca5f21cdfd7acbcff70e2aeb875f79114948481aea04633f5f72b89d6a9594cdf276455fc735abb82b6c943d894e057d81e86c");
    list.push_back("b62c76ebe2b5d253c4a69d0c282b146388ae2d42c51815d9322e126f8920b109ced25d8baf95e7f6a09ea370753e06e928aafa0aaf6732c15a46f8b3d7a8b9ec67ba8eea7a850f2b7e0ae8fe7face3ac05f78010b76f58898529d7a24fb2e6ead224a7b949932430a9c5b896e04ad132c3a0bdcadc012266877490c32007ebf951d1cc0151056999525732f90f165107b0204c41d8744ae7849ac0f1431f9ff34889c008fc5b92c310d1567d9a6721bdc18ef31976d11a800f61e298caf2d8f463e1ff2d30272d89c10afccf25d8801ed800ad4ea20e23d530b5c001ae70d0561ec150f1b1bc6fa03469bdf162394b9c20a9f0ae852e7aec6736181d17156efb3436605e2f6a2138ebb3750bfdd7e7199d0aadc7ba7c5c051e44136a16852c7fff7c34825652adb55a4e1c5291e3d54363c090284c562aaf36929a21bb63ae019424b68842e2dd6f7af63c21f0516cbc9259d683e9a2df8e62ab4318cee8746e2fcc392435d14addc4bc07ca778f22a77e4ffef099ce95e49e861fbcce534aabe055009789f65b67556eb1ffc41678bbde7b909cf2eee5ed9fcbcf63539bc0682e1f54cd658c4bb6ac12791616ac6262ecb463e5b9f55fa668092605d50abc6e5afab77b58b892f3835b431d2ffe99f4635245461c5f845d42bc001a6a9c2c67210feba75df97bb859ba1975c4238e82f2beac503a761a5fed8d164e1fe2c9b910eec5798b9b8ed59f7b03ef5a19e4f7cc1d3ca28394abb537b72ad2e0352a426afcbbc8de10f3ef39327f2369ca07a1dd1790a18e6a30385c23141b141d3d8b27bdb797412e35db07bf33c1ec5ae572abdba5a92ff14871967c906e270c8e2b551eb5cb11d785f90aa2572c3fc28558bc1779cd49d3e665de23bae3e4bb7abba32d42c14ae8a4fc98f58798d53bd413e2b0d512625916e1f2dd79fb554690b875811e09757311a97d28ae68b670577240f5dfa073e8c5a549514f83883ccb199f03b924d1de8a5033c7662ea43704678308fbaf9a736565cff593dd6e79d77a60135fda8e40b2ba5ce9f1caa6a36e4191f80a18eeeb7059272525bd11b01dee121443e84e484021441f01dc080b18d4f94c1427451a87c79e11da9b2aa901d41278a9d3593ee7505cb71142d300fc6567285308898f0d6e9249b7cb24086e4fcaa6d45f66bc1505be19b6e914a4bda28bf52d34018d14d42dc797a13225e1a750dc5382570d4a0d5f00a9649c6e09b31247f9aae4728f3b7263457d952b9d2f00f6f4aa14c2a02dfb862e19d341b00ca633b8c2d98677337d6aa695cda03c0e2fbc92a3ea7cfd14b231ac6a7abd44a93300e8df60d96aea730d444ac1c069989627728e261c9f184d4f00d46acf251ddd95d3b78887bf17dae1d1075948fdf2e66adc46179ec598bb62ed24aee975e2bc009d9612455192137e243dcf2cc09b5d3fd8de273dc9aa07994f966b76229a46d11c448c6e2c25e36149161810411dfaf8758d4c4c2bc95d4cfe36d48c3d2c185cef09d156f27e483253321396762d0b5fd6317a356c5cb76cf2ee7d8d2c8eeded9ba95170df6ccc5dfef2f18567566ded68b9eacb7ff406a3c826955bc2a8d499480439a8df094b47347cb1ae25c05b54f879763a2cf9b9ee3e9ea52e29f814c11f7f4e852d9bb4ebfabff02adf7de87aa5e633d66da7e3c4c650bde0414efe32a1df39158e040c58e35a69224cca0c456c568134a5398090dd18714b11941fb5e70c944d128679e0fe8335f1d073f847c3a9184d9fc6c876bbeb7f97be9e15e0b9bce0e690aa114bb015");
    list.push_back("da760e8ec1a3fc6fb90d43610db2dc2c736b0045044518262c433d5b0c76f2dfb1af1f7e6a8fb20a158bbda6be74004325da026df79c38076414013edb18bfa6596b6c380465f7dbe3da324bbd683eef372028020880e292f25757fe3663d7f67e980f2d07062ea9f79ca7482538e3157a54e24b0ddd897ddcbd44c086fef64311f273ffed43212aab6f630f2423f7d189de19117db46ffe0e4d80ad4aa74a66f262a7ae71531a61cda3369c493fbcc0ae71ae860c1313d51f866592d79cb7ce27e191d2b3453f89a61deda4a8e18e106cc3bd954177474d57f8f57560845d5f7456e16035e11cac09faba085128d39363174bdf17307ee7b9d9790a11d78c9cd31e64527dde926a6fd9d900a2a174682420261f2433e0aa03b2eb090f1e3ec3f546825d15d4809e43816ecd1285693faa31f6b0880962ed7af5feb236532a0a2fa60d0c7c0b66b015652a4301465a60800678ea4ed3988ddfe815cccacf9a98e609f8ebe34bd29d0e7a31bd72912f327a9ed233401a5e7ac0fc1ecec87ae619193b69aad6fd2b76d2f40f196543e7e46231a59a8cf4ad44e192e61f3fc5bf42c5f102799dc39373d1f9706f6bc51369435e1a21b84b4d67da407cefa783c83d2287160114a59e3fa5eaae93baf9ab0f6589e1a2918c208261e21e0671d84e18400370396b7833ff7b1db1f8ec928f108d0c99deaa299e46ad8df4ce9e4b47fbc57f8ef56a8c35bc64f001c29865510a2778d4bb5d699ecd7626ce28c26648c94a8737af741182077f3e9207ea16c05cfbcc9b5fd208ce0ceaea1cb4cd10340c1cfaf1c0f70dc1ef3d7a8364cc3273c4754eedc04299710e4bca8ad07c5fc86fc9a7b0f8e50c10c320bc248e035010aa2dc3e27eec0694f3f4e9189aa3ae24ad248189536ff53ee2e772ab80c40e4766275792a79c17d48c62b9f264e6a87acf7cadce44d49540d979562765cbeb32b787f7654051b1cbd92e74314fc33aad8671d94d59a5121c1753ffc8949aacdd957a8a480b8d018d8aff6d1b737eaa3f5a4f48fb80e1c80b44a7c1a5a144e3443c1aa30f4b70c771689927a474943f07efb97c79ca663491bc3c9ba7c765ddcb628b62396d48599ee7ac8cab0c42111075456780384427cf285a0e4052bd52506f78ce059e3cc3cc3c654b44149438607f285bbc6518567c9755803d7a20e1c0b29c38fd4c4659661d0b2c9eeb07901f4295e54ef83f0544c22f144febe007588a0d284f7d2c41aa9a25b967ab8d001f2d9dd80c0dd5dccf8becb94acd5709191656fefb80cd553c18642eb4a4733791021a54b11d11a105161894b558b4843a27b75cf4cf739f1b0899bbc0832775b6c7e53ef2074d067b477c5735f723d07257f64362d6b1297e026e515747405e65457e3d78b7bda975e275925e93fc2887e93accf65bc1194ea798a0a7a54ee7461e020f6a948112b861494a705bbca6640d209187ba88b5df70fcb4c700e7e3e9335054acd39ca6d063e7714ab15a25048e5c2e1b0a7c18ccbc1ef44a1b7de91eb897f0acd8624838c70896f0f4c86a76e2259a031cf62ebcbc88b554813c4e18529d34764bcf33117c593131163af0d48e4a158b84056f1bac470201dd76ac5dbba7f79d4a34439a8ba24bb46d82c006fba01b49d2d18a54ce98869b900eb9fb1896bb94fdf14af77ebb4b1bdf735cf6ba334098b8c7130d6798922e1a1cdf53e3b2bab9af36aa4ee1e1b56bff1f7ff37ce4230385e4e370595e6a0f46a55241b875f4e0cfcd43f284a7613cca2df9869a4ca1afcd38d3751d7b5bc0f1");
    list.push_back("287610e14f14ba114cad7faaeab522c1");
    list.push_back("000001e013fa880002ffff3c458da9fecefc5b4e1e4370fb61142c60f7339605e112a18d0e8f9451750cda0d784c1eb0f6bb84904bf66a6c7a5608e5fad5abbea99a9f470a4512572ac15074e1c0b99d2e63e2c88cc82fd72486aaccafa4b58f96c4c6b047a49f4c38b7a7e52720415fa04cb587bde10722992e6d04bb7d28913b3df584eb40a6c8049a9213a743a2f5b32732661213999e4fd544ed4123872d075793c14f00ff07900f26e36cdaface21dc2caa96284f22d0e1425442446b378dabd47b417bfe625f27a2c9d801d164f69f5eda1347cf1000de18e8ccd96fe3bd4accf9a481726db9db625df51dcd371cf925f5303fcc500b7face82c09c20db60a98dda3c31cc4dbf33dd5645776b89d5374375fb9b494a180475beb7dec7e59754b3735d7db56e568fbd6132841c75f2b2da9147c2ffc76ec7d999d6d517d218023498619255298020761b45f3485b3428f9ecd581d84dc45229c1c05eca5252223f21f900355253eb5f9a186f4cae1b4029447486593ec1de7bb1f3df073f137319a787ced38a6f4e2836407a918fc954bd3b42bdeab748ce3846e238afbcfbc3d9bf2b7d0f063560986e33ff9e7c06b1f486d5f0663facd783f46ea15f3a192d60f528544e4cd23e15188d85bc73389dc6b0a07df1193cfd78f3696a1d49cef203469593f357eb2b10a64200a0a4159f657ec87a0fb33092f96eb1fff12a79d609557631b79ce1e7a1eb39adb3baf04b60be164ab951c0f4b2379b69e057abebf372816621a3cd0f2a8178b7d36cc0b89151f7c4d00e41c9821d0ce1cb08d4fbb6749be83615ae21b062d481d855d6feda447f2cb1c1cf7734af735b61026e09792599830315d111226bad70e3f2418868bd71b321434e87c816e6ceca185e929f92dd6a8f0e39e3abe005ed1870485f273798c5b076a79f143fa0c742b5f45929e5474387b992a97efb5f715be0ce61ac1d90c0ec59d8d1cc3ff35aa7965869193dc75d252dfd88e0d3e395be41581f0f4af0ffeb08fe7b2317fe4e8925f1724b50fd305f41bd8db38b1fe160388037756f659f6bac2f6cd3fe36c72cdd5ad15f48c7df91aeacd1e09c0be23bc75edc264ef2a89b0aca527c57e7cdf5f612c860b3a1a9f97ee5943db61c87639ded7f80861e00477c7da2ef588b9576404cbc89e4d69184cf74c3bf37524bd873e540b5cd5ebba7be1f09221bc1a2d6088c1c8b22bdfb0ea9b0fc5023af5995cdaed7a0c8bcea13df93df96e0eae77f5c90014d7f066826cdbf7d5e6cb42812ac05b3aa402368f17987c28338f602e9a32d629e53218dd96166231bbe6319acb7915554bf8f1628d9303680a63dce6801b18b6bcbd01a30c6308e53e84ab1e6b205425088b943eee2a2d07dbb7f3a9ccb6ba889fabd355628218cd332060661b60fd319778624328c2f881e817dd58afd129497c6710d026ef22251b07e74b163f478c94372bb7098f3d0f5c2fc961ac1d1291ef31f3bbdf9ba020588487c90aa7ecca9fef8f84a9c18e02ff4047e31dc8345e6a0af0bc44ac94c09e85698611f08ed70d38ce25cd73107b132a6e35a93537d0f9e96753d827549bd2e99b287f2b089749acfa805593aa72cf8adfc3d40af2867400e487f4f7bc928a95d79a0dc74794e7c2c01f53051365c997e9083cb8056f01dfb72fed7bda6502714b73aca21bae62ac3fe90a6f6000f35c584cc32d0b61b23c8cc1df24e9232bc90221f2a0d6d5e23b173b5a45f7e4c5e16f8acc264190a6812d43d64ffb5589107904f14c0045cb349c04c4c96ac368");
    list.push_back("9407196b25e2efceb64c830e833ab0e1c32b86d193218d04350bc011f5c4041105bd696689437347dcb7e19629d3a6536876b649180d5ebf7a438b8ffed2cd7dcc04f014b5bddecdfacd4d7c5032a0dae80c730525b733507950b21ccca0f75e7e0ccf708f624617e93e98100420be01fdd646effda882382e6f884395b346efb366d866bf77dd8391d3be64a6727d7aac45d25472e179de0fd6579f03ee8f5a715ad4c5a1c3d5088f0ba7b65dc73fe013ed34d675aee51ef9769b968759d232b675a7512915dca987fd01b91c5bee378baf068eac5f39aa62242984ad81e1da55f5235b260523814ab5a670b2246c3d54a58383fbffc5e29f319cb564ff1ef7324b00baee000af3b1da1f859574039e62de144f47e4b0e10f30699797576d3ecbc8c169bb1e69122a79f59f7174fde3b620acd1d21c5b755cb07603f1c6220c564b061d921f90bc5906d3727486b8708378b135a1cfa6de1693fcf47d9a04c676610dec7867fc58fb4ae82c28f0db4d231747a92e92648fa465fe9075d18b388e910a40e2db493eba0f2091df8be95d437b21eebfe04d01b54d4158fd98495c00ce891bd36fcb9f06228874aa7d137516782f1952ca9fd551f887219a55a3377f494f6735b12148c66a59999397b8baec97f926da2c2360cf4e2b286e42c92b50b9cc83c11ee05ee35bf8ab51b00468f4cd412e109ed55079829c592c0121ecf93c20251a1cd33b52d38d541e545fb2ee94506c29ff58dad7f5b3cf3f882c9e617c93e566f55c357d108576887685cf135b5a7d7f4b9bfc32fea11a6e5b6f3c3029a7d17146f490b47e09b80420032c6961074f00cc204946c0519c3c62e33ed81324b9319ca147df6d9b8258a3cbe5a3d1b2e9ab61734c12c570bc9728418e8153b1eac13e656c93f43cd97a9bc254fb1a56a8ee91be5f746944ddab6e3e866e8bb0e6691d5b4a58a49cb7f7af9337a6d3709cb2b194f61175b866d2ccb70bd3fb18075652af1bf927d841cf92dcad00c4ceebacf7f214426f52e1a641266e5690dc2eaf2911cf5c8e0e7414fdb81fb69e2b61b6129e715d7f3cfa977f0e78f2be41dc4ca155e4c45858ac0b28e11b4701b5af0f2a186cc01aabb0136c1db935da948e46e821e9327ef505d9225295a2c7f7a7673a01ccfadacab42b53fb7476730e2654dadf1b13b6d29026feecbdd9984b8c1fe43a0bf3d6f4073ea73bcb775cf566a80f3a4e328d826f48e5057d0eaff92bd092f6d802a61d395b5bc0cd4480d19bac7efd800327c23a86d07000a0cdb8a8cb7d2309fb6f365743de473647cd6564b5d2eaed3a7befbb747c644bfc56c299a07f8219c3499b940cec6f8719492b3b7de54df5ae5d2c0cc96680750cb51b5e2e3f179874bd5edccdff28b80ea9e0d10141f6e6ed122b6a9c6a354485a778a466ff63082b1f065345ec868181ba921a079914ae6c7dd60368861c3edbbdb69a3e63f34eecd07f05b3dde68cd21ef9385fbc5a39c0e970f5fcd5365f56b11bf9aa14c8306b052817afa17fc6738bb4f2f2c66d6720fa437e398b4b39bff62288fe673a82d08dc0128aaede5223ccdbad48894331abdb775efece2c2bfc4397ed3cbb88849872afa514d2ad1655a4c0d9e8786dd2013ad3686d398bc8006aeb9112fd8ea2c7f606d75686623fd8a901e30797b651da80046dc0e2037c678d3157cb4e2e0f145c7d064db2b2f6448d1500c94573cf400013d9e6dcb9209f2daa89a98f960eeeab2df3a35e691fae918fc70e5e1974fb4be865c2543292173a547a921db340fd547edd");
    list.push_back("6fc53c35ecefe28a4fea2adbfd1d4f0a6fca94d126a9d458c6635cc12d9bafc97131016e97c25e3aeaaf84e285d96e61453880c5ba04bbf253c6b23a5d62e11f94a74de259b511094337daa189ec338c74dbf3353d52b587a777921d6c16357748e2034272ceb1586726306091cb99519f5ffafa64510ff4e492883c5411522483d1a4f8635caf8444cefdbc27f99467a1da3b5d20a3170898a2dd49be5f836cc831b8d755b8f05b31d2ab97aa41af9b6690d2bb3587e8d0cd911f5e25e7950be646c54684d559b8a33152a063d4c8f05c96c814399205fdd3437c227f1ad3c8b5ec970231441d481d6790a8e927342578b1e6e124892fa55272a5bb34bff179be5d413b3fdf0d10d8120956681a30d958636300004713a169e545fe62af3a4aadcac524710237212bc60b8760426cb796b03fc6d8ea5dfea8f848d87bcfd0d8fef9e915b76644ea0c9fd1d62902d1631b1d090fb5af881cdb2841a795d0a22159b7519a16707ca101cf03e7ffb08d3c00e61be371ae27bd165fea80a77d3f5bf12161d0c962fe3c0ae72a9c31352ba788cb9fbb27a48506d155c1f552a06676d91b93b1c5b9ca8a43cd89d88dea452ae751f989143c3bd33b262cafdeab5370936578be86bed4da42c5442121797e284a62e4ac2010b95caa45161e355cee902a401874796d79e2192ba6bcfc8725d6bb4b7780966e039a9922e770a9d0987bdeeb99be14bd0c0db11e65c607c1d8cb88eaff4bd8147da5385bcba7aa8d3cd837f318643c857cc8a3c610655c80000ca8a3774167e1de0a99cfc5abc814a580e37b7ad52f78c38eb5b4818fcfce99fa37db2e24e41f02f258faacead0d288ba231de327530819e2159b055909ecf644beb220b4b843dc61debeece38612d06277fa63da392af633f5fe070b669b3ffe63c110542d74bff35e192102919fd987c934b12f2dac3b09ea3aa4ebff4cf4c7212399f00b91d8226ae01592818caa521f84868c5150bd2caa84cd7f39b5c96f0f969dd04d109df64f37f303d4f9b32bcae2e80f589b4bf2cc55f0c2e028785f25e83878ceebb20ad0992d47f68d56da86563e6dba81a9a04ef6177c83bbd7f15881adfb425347340bf40d5829b1ca6daebe8eaa76390d6ec2b1936e2e8c6622fd34fb2376d074316361700000af7f7b124ff33262620e6c9acb47e8d4566d782282635940f5d4bb9eeb778836d489952bac439c14de7bacff8ff3c57f061d8d7eaeaed82394ebdcdb8e040d4938bcdefec424a744a762ab08fd49c9838ed50f6804e9495d556b31320f38089e1bbdf8f061d2ab53bd71853f20065679de1c7052ef5effe22a80e86197c812e3e3aa6ea8a60fa76ec0458257ec0d3cd46ad3da4fe7057637f60b647e7b202ccdea54b73ec44cff5be8d2ada8e1fd1d7a673303d104c68ee96a3addf61258190a27745f5b3efa540dd7945ce8f95cb0e96ea2a8f6f5d372c962526dc24a2b41913a0487290aef4e7f6a32c32d02f5b6fee2ef419b924d6ed67a15d6e5c331b98cf5e115ec1fa6be309789527c0089e571c7c5e18bd8cd8cb02815f4b2908c0b920000357418382c96a0fb6ee716580001874c5cb47a270548bd60d9c37fbd1a3be1f03c6c1ced3e78a9fa7c379ac46d5cb1f67dd7c1d147b80f03599f5ae6e8e11ff3d539921ba680ea2a040ceb4e7c7df963f059a961e397a29ba5a41e823c50418018f4a6c4970c9c8d395bb19cc065e751c33be1cf54470f9b6c32be1600159981f352e879137944472c28d5f05b12463f87299164698183060d2e3ab60a");
    list.push_back("cc0810115f943096e8ebe46ff57ce77e157df33c861e0cc53497f2ba1d7b39d047ec26bc21a2230988c6b2fd8ce161c8dd28f4d6b0872d3457854689f9ea6a4c93f2e22037de66ced9d802f0cda463ea8344f5df38a0126cb3c34ac4d1c40b78412d1ef12d5ad57ff46e35df2d90b6d77c81553f1201aeda50bf96a99bbb960bf1b1da26000f502341427cffc2ebf2d24410118280301f51271bc127df9b416424de729f5d54ce7ebcbeb3996b8b1c58086b7c8a0f3a60bbf7ca00498a687618fe388525999a1737626a571f3f4789aa01c0f6cd073a6fe41a1d808eeaf5d1c460f52141a4304d4aab89b73c9b43f6966f6ef80162d2aa6e16dea13cdffe11259d0e3e5c8906ebb378d918d895d4a16776a27e09f6eefb40559cb5fa4c5e0801934a6e684079d34bc167fc3a1eef1f9054fe78c518ccf15fc64f59a0e541145c28da69a48113c1a52e87894bf1baff9b0c797efe283e7f7778c33f2a251cbb7261ac686eadeec47379d03adeac18d74e6d390def08d21dd69cd4f0fd7c37fd57095ece083779f7fbd33f3e2962ef7886bb1a90c5c16cf148807625f6276801bd40fb185572afefb31801a4375e40d62522418d77f4dd927cc200f47e84b94ce90f96d474960bbf1f9650e2814990b7ca570dcd0d4f19471a8765eaf2ac23a704004163267efcce02c17ec5691fa04d296e0e12b71437d8688451ac80473c8f01bfa55bf437c11e1bb46efcb6dc93d07f66aae65604ba0a393be0edc910d59f6775c85cf1009f501a78e26fdd01c606ccee8b18f963da50865db90dc2964523a2495472bcd53a2cbac6e0f46722b20674994594eea5684e539df461338c0e2a10d5063dd80ca523213d31b8d9ede138797c0a01be1e40f2f2e8f5523a27abf65c8cfabd60f58b866de385ddf16987d8273cf4efbfaeeed07f0e36a056873fb76a2173fe241630f8ef395a5848118006131c4a949625ad28ec84166516193fe21ef314f7f787444867512919bdf245ffc50426052141fff2018447592efacefb75607012f9572001a76f9f6b931eb165a5330e0d6780e8749a5bb7951c5296550d3be3ae5344117775182ae91a17ce07ee0d47c5dc79118b1088908322db5cb3b3fe47d78d95e15de38debc1a3535a474aa9f680b80416516a9720df5fde14d0094f18f5497ee5c8129bb8460aab07b1e5de5ae02350d7e74ec362a31892d9706e8cd226e9166bfe779a7de4b8865caf6da8125107bd24fe8a0094bea40a84bf8ba5a438450f0df953c8ef44c162669cf2c5356fd80c98c66aa79211f2093e0bf20abfbb5afe81a1497830ffe3875852c9a7369841b48c638ca1dd873709ad034d7be3c3219a6afbb8b841bdc7886706a3fd20c2cd8f09291307c77b69eb99c65f9e474e24bbb6128f050555681c55df9dab67503826fdb73dd6c6ae335658996cc637746f69a00065727b5adf41b9097fdd5b91bc6fc07ef3b86750e4efea98ab673e316275ef1cdf4daebe9bcadbab2f580e9b8495ad9de1ccf933e0b577d6404d8d351b3a82f8575d09363c1af90818f30d95379991510b7647556ba9d7ea47fa48587eb27c05a591826d9c0aa69cbaa198fe0ed088d2e18e9aa78b11c4f8e72009678806b9998eece955605aee46fab5385536aa7605b9a77e5200c5a9213de9f24617529de9bc8e189c8fa28f1563f31c289d2f576effc3394cafe4c1017d8ade2613e683c2b0c0597df42954bf2eebb35d7432f97c90dd0eece117ce38c77423968dbfdeb275bc23e94af8d18b56cfd6379e66e8447126848547");
    list.push_back("e6c778e064bc4961efb505677e1ffa0c");
    list.push_back("000001e013fa880002ffffba4dbd7acd0f20eba7a42082c2000ae66d3c4e79a43547c9cac5d8de80f72039f9bbf4de7c7551389ea9d2d8ea7945058d28991655cb1b22ef220deb22c78f517c51dd0188dcf0a7e420c9754d14b25b7c561f52a3bbde807fb9b954b2c691465ca5a3baa771e99dacdaaeed694d34eadc72734c5cfc7201b60bdac02baeed0af26ceafb48c9558b4b8c4cd0bbffca2eb8669d3ab113f0f1a4d0f0fc624060a47c24e880f308e6dad011590af54776ebd076c0c76f889b10c41620aacbb78c5c2d1c342fdbf42e78365cd4c70362e654b48346f987fad430e4895fb193c642bd6e16158c79d5b1127e7b5f847c7fc73ba7beb83096b4e258a6dd1d99212884122444cfcd12bacca4d9045e5a846a0875a87f6d83568fbf3b2899f7c2245ea8f1e9538d1b42aaa001f0aa9d8318ddacff761eb77f1cb04be48ef6e59baf4f079d38eda48103f2c98ed0923f81edb99096d25266f7d5d0756acbc8c83e4bf09d4ba60f7c40c80d2097d79e48e52b197cf2b8f78b092a640451601ea19e74771e32a95644ff46661ec7133cd710894eaabe299b6b301d24c04fc0afa71e76a18dde0b772cc9db8505093a2d4dfd67de9011c156f72e35c5c96d4e6264e58336ab5108fd5db0e1b209e077e31a73bcc11e7a2d262382006bcf0d90fd9f541f0bbc52f6db9281718a870b4af36e193c3a8696998c2edd10d4f6a50bf13e683cecb38c5e03c1e942ff3de410a7f68591c63daa91618dd9343ee6daa021b12f16c00cd485b75b90fb580439f01b79169db142b119d0f1750a8d5deedeccc4a01c006400553696fdeed79c27483d7f56564b8621f7becf9b4089d8ca9f261dce5d424b8e221ec97b642763b39c4967e90a0b665ac6484e37ee6e9a866eac4c032bb041b305ac4b583912bf4f799d5ba7bfa9bcf3649694e467b43caca42a080738798de954e109a0e89cacad7acd5789eb55c4d3a48f8eb1ca5004f74e3e12aa32d560d07e62e96e42fbaec845766b2527979d578e918ed2774d269bed78509aecdc2f884b02bdc10318d6533313de31a10274966253a52604e9355c6ec8cf1939c293b688d539d6ea9e0597788ffcc723cf07a527959ced68ac1f8c5df77ef6b955d48c731de63baf0732cf3d5828340093ecedf1aef392b391288c3a46990177e3c281c3b02939d671ebdfb7f04d7008f68fbaf620ab13267e903f7c2b40abdabe10e603d1a4aadee8bc9deaf4a10e412929872e5d693cbfc18060940dc0477c294e46ca454bfc037cea2d3842af5f23aedef1a73e262b696937829d6ce8b78a4f647c5432474833cfc47889e36d7a4dd8475127ebbddad4e2e99f98c575ae24bd5ea53fc941bd3c8630836a5187785e90403d5dfb901bf4ecfbb493ef9b1f6c1831969648a0e2a5421d4f562694fda85c2c12e9ab172050226d51a2bf16ecbedb606b4f03da0d29aed65c9988978aaf2d87383b18018beaf2d8fdc94435457be83fa837ec288d74d4a2a7058a5c1946053e0fc417de1dac00c4f1ca432ab3a4a8b876c5fdaac4e05092d82af6e955dacd94ee802a010e8ebaffff432a652a34182cff2ba138ef74ccd0b4698d8dbc2ae44299a143078797bb5e84e4a3a909b0521ba448989b951321e1a214f07050eabbdb73c2c3c1e2fbcc0403fe8649f033c13550863f2b4055debe1aebc9b14854f6da5c8168ffa0af9579b7fb3ec8937db69fa13421c25aeb9cdb46cc49f15b78ad6220ccf35d8275b35a23dede8ee550e0cfa64d57d866f320bda213abff86ce5cea21d6");
    list.push_back("e710a8f400e899d4bc6832fd4388c847be74136e141394ce618601a8eeaf0c5300597683328801fcae42c13cbe89d9430b9330bd1b46876d78f56835a6b4a72de3b3a120cc4c7761dac9596dda3a5809f7c4c860906a2ec02267c04f4454f56abef6b2fb0bac943b0252a0514fb477c70052cb46a27349574e7d010b5d11bfa9aa04b084dc520cb47903b7dd3083f61bd0040992f1bfcf2783a83c1d311be1671cdff18e43666a992a35250ba0eb93c4089665af16f8125aa6fe1692c9ec40b03d50522744d28298f297ba6210d5533a5ea7f17c91012d6df29b4697ceb6861bb8625d77ca93c4d6f03022bb08b1c67e394c7069d6846302a98c5fef7e67cd491bad68ccda565c21217109716627e5d84e39061830b92e85fb8ddfd9a4dc35c6d5ac5f45b86366b0d28d1ff9a4b5be2904311c5435cc55823e2cf7a6a44e595c8593e4a3b5f8c7cc622af8e6b8c3b932fb1ab8d63a5cea60a0d763db7ec40bfe6277336b2725d59627ab1afca5ae1ec1d7d7d3a093330970e7585fecba45f0cf4000487c199412e550b5b91418c9d7600fb7b8d8ebd37e70fe8d0930c0d6479c1b9b101fb90ab3d7bab676260b5f872eee7d708d0bd7c217c37e30628955014617e6d44f938193cb8dec6cf39a7a614bdda3c2bd3fdf1cca625a1350ed677563f28c7c8668bfcd957e3ae8fa25d5aefaaa70c4804b9c1e507d6f9a5419b771d74edd3a7aca1a8721affc54377f9310fafbf09e44aebdbaa60c05fd7db65dfb47a178fe75762debd96a6ea7283271ea073030034c870326b8fc25551ffecbbfbd4e13954ee1d81c9e4c415975c2e556926350382ea3843e523c12682c5a74db292d397449a43a412a4ccf4711d535ea89a713b7c636e6967b5fa907f76e27d883e961c7856ea6abebc08d73dee32272522cff4d09f17474b95f867c068d6032c4c8de937e586490ab1ddc02185b882d75e187dd72ea7f96c013d599cdf31631134f134bd90dae3ff0087d31fa230107f10f6865c95a20f0ea0d7375d36558f0714af87ad84c70f5ad9de78ba54538d8d7574d62a90a55222697609b2bddb6590b2d31ae3ccebb9296f18a3b2877f5499cafdc2444e14b826a75b212137f7ed0f70ec35ee0d3f16eed4a3098f9fdffe19c122dd29133ae90bd69c02013d7ce16ef8135abeab73b43eb94a3aac233af8db0eae865ee2974b617db16009799585e13dfbbc49256ff18bc4e61d694c248e945f42bc299c3998258332d03c2e300275bdfa9294949045050551b246634feb16f4b3e6314bd060d107f48354fd79d4ae45299ef6767d9df1a7a5b1cd41634cd8d14445bb1f18329aca676ffe404ebe1ebabb0e9918df96d8acfb7ac0c37056f6cc17b3277c6e84ef06453f4a5b2e2db8e82a61fe6a47bd489d6dbb6385449c06b158f974a8fad8c32d6b80011d7e02f840f26575bbce755dbc024374ac047b1e781b03a552880e8405432f16e38ec0ce94483b8a1cfbbfa8d694a9f43cba04ba23a624ea54d92dd39beedf11ff5c5bb34897ad95cd6dca31a4334311b721dfe5fe666dfacc45235f30c735c5d137fbc2caa8357f27f7eb2fd6385aa0dab7c046b198cf353aff458e04cb9e96828dd93c5804f259e687f4e60909092ad913bc947a4d86fd071fa958f83efac9780bfedbb32aff0246dc881ef7ad4c8717d9072258bee7003f897b6331f224e47c4dbff7aa0f4ac23e2ab50f708fb597873d9379489e206037532ec28613c2375fbfdb2fddc8a4e40c744af6858a43ad888f06fc889920a3e3584c77459a335df");
    list.push_back("cfcb2f92defdd64f4973b6d3de546116ba8fb90a5c26b1b22b748ded78d637fb5bc9eef66c1c4a52cb35b0e50add5f8d580d339e910c72553ad840b609b137be496ec0379dd9d06d0e9524643f3b6da99111f168fd0cd903ce0bd6b8008e1c17bf74d1466fdaaa71a7474653576446f6eb58e9fe17a017e7541040b1bb1c260f45ecf271ac9c8a3d57261e58cdb24a051756002bd56a13ec4ac348b47e986d84eefc5a2ac40fa4e055d0b38d6fbbc6121815e3bcf7d18451d5b48c2a8896eea94d6f225094857189967c622a45f76e0da98da9c1099750cef903084c1064ebec9968738838166bef38182482dcb2ea3d3f7dc90e8b5d4aa1fed793b3c4136edcab9d145b8bd8354c16c17c63fcf0064727d85accc06c9e9fffed02fb471ab513ed819fb0192b87c6513b827e52d50fe4a906470df3ea0d032ae9e6a4c4839776191d466a4128d2308bde9c48d3e241a5bfcdf746eefff199e1c56b12e1bbd50f271d8a27e34e2f356408134a9fc65c39fe3cc48e87381ea8599cc09edfb08e5f4000175a674523be893b1df093ffd35c880b2b2edd7fd03bd0ecf12ddc6fbb1b532fe5f11700905cdff67ef830d6fe03e39ed628bd3262e419f15fa68d0426b99a68a3d0eb2597029fe9b75f3bc91fd7c623793dfec42c4a95d558c47b6ff6426b24dc35f55c735a04547d7f736f889c4de6a822882da9c0d4de77428d5b5c3e6fa3b13cf187c55ae23fca6fd0645c28be2e7c31bb7411f898e00d4de9dfde8b7d6818bdc3a6c052a56b9f4243d9350d11f0acd11c67cc356d11fa73a305aa2531525ea8fb0c51a78d03db9a23495366185db8d7ece7fba23e52781fec810496199786c2500b53a9226df0a8b2120f08f8fae9e10ebc1a069f4a6bb58e37ee1e494ca65510f5c0461d8d4d59d80ab9048735585fc5bdb67a8520cbdf20aa52df99fa1e9631de9e4f3f7e4b407cba845581681668e9dd21a8febe658b3896519b65ff09f0df3afe33c5cfbd20087bf2f9d965f27020c7f77ce31bb5520c146ad23c2be1b8bdcc2bcd7c5c61df103ef511118aabcba1b1d35b3c0dbb6d762c74612692d8e6b407c90225d14498b940e9e6e29cc9e8e42be0ba5604a8c3689a52942a21b3c4656925fd23f1cb8b4afafe9d34cf6565e80fd7a3735df4ad4e61d5de7eb97cfb489fe7de3f0e039ce878dd5c9a9a86eadb17678414e8db2cade68a3f39652bf802f5df730ff729564caad0f5fcbb5640847f98055b6de1f57c509eef09e2b54c7c65940cba2cf86eeea6cc487dbf0a595eb8b4bb51cfe0d76e02c9b74905cb0a829be7d7092019dd166555b66895580018645ba5d4fd4ff26451a6667d63b086f6a17f7fbe8267f7be9141a5f0c2a99b8507156bdbd0de73d337a4c8cdd9f88dd0613e13534fbdefb004e6c92544e239ef1474e25268dc0fd077c1e949d109246e6be8865b2ed9a867d648e9528fb230f347d3d74c7826c7a337f778318fb771715bb9f3fac5b947fce9a62f835e3cb9169321e03141b2689b5db7a1e47c2f2fa5352997750e0ea84945bf963e39f5ab95725713ef966cd738cf8d61d40e752ba82b4603c0a733202db66293f76e12dfcc4a56f0c6d489915770c2dc3d21f6e0b2351047cd7512f0f692d5674c5aeb98a7fa16c9900dac51ec2b1f00338a340e599bae7267aa0084a82ec8bba963016740dd500024d7462270508a1c4b96ba6a272b86035a7c08078304a9c9b37ff30ba082945ae745a00fc1ba1d05e1f5005e13b757adb4a31e0497dc1a10c86c587ed6816b84687fee7b");
    list.push_back("2822c1a8192620611bb09775ea7ca8975701b47ef5de6e1de68bd65b9298e225e7d4722769c5cf69f2dbb74db5e75bdd62ddf761c3e62616bf02875bd824125ee726c9e21e93ffd6385f88c91d0973ad901649f104ffef54382bfb1f2bfad0f90f199e0ca6f354ae83b5113c097d73f6a4f37af602dfec522a9c484d57f7e1099931e974d585a5879406e1eb7a530e837c004c7d406eb30bba9e550b6b2d4d72b6698f45a196b0ce35590367f91f3cf45be8c89284c8e08e2b4ced6eb815a5546f34bcdf30dd390330a92a8b4ab29528f023d1dc267dde91a6c7f2b361529f720c9edeb9c7d34d7f583e217c8ef5fa1b037e9868571e2d8a2e0fb05328ccdeb1183848f53958c139048b2b0e5e11adfced0d7c4b4ae0492e17018c14d3bbd08064fe0df2c91a073a843ffdd51e7e9a9436e83fe160fb4c8809d22961c21c0bc3595acb77a6eea84875a31dd71816212a86343f64700b025b8ec4b4b29696d1a0d5d9ebe2c51fe240c6cd45796bcc8593cd80132c597fb8709b998d54175371cf05de82c71aa37b8cf185b3eb72e8a42f95445d383c1bbd4089c6976a34efd0eb439a3808047e7217e0b6c049611cb1d45622c4693205b9d152c449d705f52b61220eb88e9eabfe858befe5f37ad8965626f43df57071d645253a4889a70ac27d8e7b3eab51fa36522dc3ef61a7143590d4b5d9f24c1151e140c225b2f6611993641366365ea5cf6f39e4a423f87af3d62276d8113597b58057c748e27b95b9a4b6d9f472eea74f88e775cf0942f7fd1c8035389ac2a8cc7fb24360df2ab3c12c30f873406381ead1d6c9ba1030589da0fba8c37b9bd90818eba4dec012d22a95c35c3857244348b43d8859ca9a5748236384a60a6b34371d52d4d0ae1181ff8cbe9053289d52063c728036ddd39464c53118e78ddd1948d130889d33c81689073dd85285714dddbfc967ef24d7da2793031060f4c44ddff07cecf601a666337a34ec48693f9b0a09a72cd38473347604cfdfad93e2da17d540f1502a43918eb3fcce5eaaf8a3c21557f3a6516e61608842061b33811d06f5a8abd5acae308ca254988867590c89700625c6c054a064be130fcead3b4f5c6db14d929b8df08cb843a13cc16436e009703d8db8e9760e82cc38f0231141100e9ac35b4c60590f4a517e7ea7776de2d3f3fd48b93372042cdf7d63b17a2555acfb40dfcdf89f1351d4b372b770f13b3f5fba3c60e7198c600cf407d251e4b71c6976fdf1c2ef5289d3a9f3e0666b4de6aa569e9f1fbbbdb445576f684d73a6c2e2eda1929642f85f3296c0a745092c0901e42e76b01ea123693cded7932fb290fca75870615ddc3426ba52e2d76b27fc9f84e38440520950bb2b4ff97d737bc5f97bfdbcec3e68f6a3331abf9dad7f3f2ea74ab0bb1ebabeafd73d541955f27eafca8327d800109c9dfff2ff0bb19b786dcef2b90d2039f56efb64c68a8d6512a6e724df65295356e7ce93563dd683dd1e032614abdd4a95f5e8ade2b69032d4edf624eea9d84dafeb9e39f8742dc4c83465e99469e266d403e140f743010d35e051142890d739fac2fe91f122debcbfcea96f73aacf2a015cb1dd4e80602f0b33906e4bdeee21080c0c0c1efbbd6841342f0cb7d77174ca6d71f6ad20d33a7a9fff862cc351aaf4b0b9677a7ebb6364c9a7e0802c97e4512aed074ad1c649c8859f1cef9dfe6a8a39184b0e25b56ccf050147516054340fad34e6601912d61a1a9229f9396991904702a9bec1c17126bfb826a95d869ff34f8c0977b99a119064769e10");
    list.push_back("ce81b0f5d3fdeff0f65b141e5a3366cd");
    list.push_back("000001e00666880002fffae1363025cbf8970c66d80b22f2d795010c89d4ae86c6cd0b2fc104ecf0a6d9ee2b4917482ad0ed389d37c158ef86828a6843df2cd3635dfa567ac8c54775c7773eb7da26059897d6b1b183fcec4612f400e600a03c4150941eadcaca56417b5b663257737c43347c24a52e25ca8cf810f4aa5da8680da3d8d69700bdc219c4c3e7443d1984cf4801c7bf77d9ea279b3701e2236ce0339804d04439d16a8af8bcc0843e5a403fd6e475e8bd1d1f4e632ec62072a1e638ca3dc886388206405574a6a18ee69814a55f267e5465779d1bb6f06f0a5f9c5195f511865cc836109c3ce91c7edb3a969f07eef198d903b103b4bafe9cdd8a787c45940d846e4e71caf6f040a2cd34ff74d58ad8e4001a8f9e0050897f80920f76a2580f5b51c99beacc0bc70acc558157c10f193eb30ae549686148ef8296d014159c7ea93c5a9d5867f86e4b9acfe64194d6f8aa703c654d5eec57cbcaa571da233459cb2d6dfc179aadf23460dcf07bb4c893026836ea5f8da6b4dfda18fda6666cf58a30f3f5ce2f0d4811356c6f92ff1e860a5373a812e6525b57a0f9fd60444966e4f479eb9375648297419e211fe9f566079b1ebc2b464b98bdc715e585eb5c2d6a5f005df0e232c8df0d989b6e786415078013a06606f7344c65a5a3925fc7136ddf08f6b00ea0e3e2afd6bc20760712bd08233a3637d192b1826b1dad292417dfb13aa35d70d07d7a38156330692cbb0c734ed7218398e71672a725c73e1b6c57c39853c4df2f9a89d54039aa0270236964f87dc5ee081e8ac1dca984380c8afa8788196fb03def43d7e1af15157cfa8d6716e94ff6ba1657920176152a6abfa30d307f80d0f9b390b08da8362a7cdacad097bf6663904e5cc9bc655785b96ea02f214ae1e7e9eb4f27cb6e7f9cef0c1cddc3e25870ec4007a70acf1f2f7f0f9e272eb818465e975373e9af390a21765fc98aeb4fd2594b3676cb730df2223097e6172d1e98fa6e1236b177dfa932c3f77aa3b559c6a21ca6163c16b90c6039a8f10459862ab9b08a7dca0f30b081bc9c50b7794d73f4072730530aad50a456013d520637dee6946ee06eff5d1c5112e0cd8645d8a759fdfb7ea43417a2a86f1eb7d4459f26ecdb51b206c694b5dda058e3811f1e983bd3437d4df81922c16f9fc0af1ce73f0321a0f3aa8dac2ef4bcda14c358539ddf7127827550c434ffe1ac7ad3bb555034eacc46e297b5159b4df96e25f38968f8eac6466a1bf762cdcf9fbfd91708e4529a15261158f7992f4f586fb952b994c72a0fa5973cadcb803f14a3a752a8ffb1ccae01f9cb75d471a89c8cd3def4a519c74bc68d1a9e4843b572ed40aeb64c88fc375c17ae16d55cd69f3a8ea581800851e60f0eacf9138142e6151c81844f5967116fada10f409c5e17a8f936fe9ead4ae6327b3dfbd36abec6c00e42061564e26179927d7b07549bc6fb2d46bcdd4e1a6fee963a904b59d7cf7bd5d99f1f779768c17eb53b2e0e4c2a230194bf98c4a11f49d862eddc1b2ecc6d12968f717a1a3f79b2c95fcb33fca9ad49c07b141693ba472fc77684a5fa46953ae964dcfd1823842f4073776911c6bb0d0ec5fd36ca5dcd96e3254a5edb82a891d71159c5ee8f1773fcc56001afa84f5c21f36c8a5d70273a1025b4ecc363df0d7e377f3612821d00ce99a12d60db96898be7025381f8ecbddbde983895f0ca501599d0d8ee8dafd4a5dc2d872ff5e0759948dbc36bf3a54753584a0f9d55f7c54cb2cca9f834bffc6acb083042af697ea2767809");
    list.push_back("aa38b58fbeb83c15af4dc0a40b73f78558447562ddaf720334b1b38f24f7fa3fa65105fe7373941f58662a8bdc7202098b15935d66a2ba14979f3e8dd9c3799df24353cea9886c80a52547174df7879b53b71c189c83ff6353ee330d582ef00d457a21a2fe020bf46b432e5578774c206db8cdfe1626ed12d3b1513b732b6e6b2749cc18256639900969db8964a91bc7a76a8c8457a2c2a0a63f0a2313fe95cab30d5e3cd175ec045a7814de00000cc5f943750b2dbdadfb26d9f058cd7c6401753d2f95fd16e4f8b9dc35b98768a69f6c3b5e418d693365da951dfdae153b03c600235730dd57c3f1706e45edc48ff1f3c056f08bf2af1e29eeedbd752de5310a5e19d489e29c31b3c54366a71cfe1c64869dcf3cd7c6169d99be8f07744fbfbfb5c8e18e2b1165116e2df33b56e1381223b7f07581fc8525f67c38d682cc1e882c863726484b59f9f2be25a1af352fbc0df5d56412c10e975fbf59d4976c8c929a8202bbcff484000042da991fc3c0");
    std::string ret;
    for (size_t i = 0; i < list.size(); i++)
    {
        ret.append(list.at(i));
    }
    return HexStringtoString(ret);
}

std::string getIPacketFromFile(){
    std::string ret = readStringFromFile("./src/data",0,0,nullptr);
    return HexStringtoString(ret);
}

int main(int argn, char **argv)
{
    std::string packet = getIPacketFromFile();
    char h264Buffer[H264_FRAME_SIZE_MAX];
    size_t h264length = 0;
    while (1)
    {
        GetH246FromPs((char *)packet.data(), packet.size(), h264Buffer, &h264length);
        printf("%s\n", StringToHexString(std::string(h264Buffer, h264length).substr(0, 100)).c_str());
        sleep(1);
    }

    printf("Hello World!\n");
    return 0;
}